#include <stdio.h>

// 合并两个有序数组
// 这里的题目使用了三个指针,一个指向数组1尾部,两个各指向数组的有效元素部分
// 原理如下: 由于两个数组都是有序的元素,所以只需要从两个数组的后面开始比较,两个元素从后面的哪个元素最大就放后面,然后依次往前排序
// 当其中一个数组的所有元素都排完进去之后,剩下的那个数组的元素就是已经排序好了的,最前面的元素了

void merge (int* nums1 , int m , int* nums2 , int n) 
{

    int pos = m + n - 1 ;

    int src = m - 1 ;

    int des = n - 1 ;

    while (src >= 0 && des >= 0)
    {

        if (nums1 [src] > nums2 [des])
        {

            nums1 [pos--] = nums1 [src--] ;

        }

        else
        {

            nums1 [pos--] = nums2 [des--] ;

        }

    }

    while (des >= 0)
    {

        nums1 [pos--] = nums2 [des--] ;

    }
    
}

int main ()
{

    int nums1 [] = { 1 , 2 , 3 , 4 , 0 , 0 , 0 } ;

    int nums2 [] = { 2 , 5 , 6 } ;

    merge (nums1 , 7 , nums2 , 3) ;

    for (int i = 0 ; i < 7 ; i++)
    {

        printf ("%d " , nums1 [i]) ;
        
    }

    return 0 ;

}